#ifndef __THREAD_H
#define __THREAD_H

#include "SDL/SDL.h"

/**
 * Représente ce que va exécuter un thread.
 */
struct thread_acteur {
	virtual void executer() = 0;
	virtual ~thread_acteur() throw() = 0;
};

/**
 * Thread RAII qui fait un "join" à sa destruction, qui se lance dès la
 * construction et dont les actions sont déterminées par une instance de
 * thread_acteur.
 */
class thread {
	thread_acteur &acteur_;
	SDL_Thread *mon_thread_;
public:
	thread(thread_acteur &acteur) throw();
	~thread() throw() { SDL_WaitThread(mon_thread_, NULL); }
	void tuer() { SDL_KillThread(mon_thread_); }
};

#endif
